package generacionCodigo;

import java.util.ArrayList;
import java.util.List;



public class Registros {
	public static final int CANT_REGISTROS=4;


	private static List<Registro> registros= new ArrayList<Registro>(CANT_REGISTROS);
	private Registro EAX;
	
	private String last_used="null";
	
	public Registros (){
		Registro aux = new Registro (false, "ECX", "null", "null");
		registros.add(aux);
		aux = new Registro (false, "EBX", "null", "null");
		registros.add(aux);
		aux = new Registro (false, "EAX","null","null");
		registros.add(aux);
		EAX = aux;
		aux = new Registro (false, "EDX", "null", "null");
		registros.add(aux);
	}

	public  boolean todosOcupados (){
		for (Registro r: registros){
			if (!r.isOcupado())
				return false; 
		}
		return true;
	}

	public String setFirstDesocupado (String variable){
		for (Registro r: registros){
			if (!r.isOcupado()){
				r.setNombre_variable(variable);
				r.setOcupado(true);
				setLast_used(r.getNum_registro());
				return r.getNum_registro(); 
			}
		}
		return "todos ocupados";
	}

	public void imprimirEstadoRegistros (){
		System.out.println("Registro\tVariable\t\tValor");
		for (Registro r: registros){
			System.out.println(r.getNum_registro()+"\t\t"+r.getNombre_variable()+"\t\t\t"+r.getValor_variable());
		} 
	}

	public void desocuparRegistro (String nombreVariable){
		for (Registro r: registros){
			if (r.getNombre_variable().equals(nombreVariable)){
				r.setOcupado(false);
				r.setNombre_variable("null");
				r.setValor_variable("null");
			}
		}
	}

	public boolean variableEnRegistros (String name){
		for (Registro r: registros){
			if (r.getNombre_variable().equals(name))
				return true; 
		}
		return false;
	}
	
	public String getRegistroDeLaVariable (String id){
		for (Registro r: registros){
			if (r.getNombre_variable().equals(id))
				return r.getNum_registro(); 
		}
		return "ninguno ocupado";
	}

	public void cambiarVariable(String oldName, String newName) {
		for (Registro r: registros){
			if (r.getNombre_variable().equals(oldName)){
				r.setNombre_variable(newName);
			}
		}
	}
	
	public boolean setNewVarForEAX(String value){
		if (!EAX.isOcupado()){
			EAX.setNombre_variable(value);
			EAX.setOcupado(true);
			setLast_used("EAX");
			return true;
		} else {
			return false;
		}
	}

	public String getLast_used() {
		if (last_used.equals("null"))
			return "0";
		return last_used;
	}

	public void setLast_used(String last_used) {
		this.last_used = last_used;
	}
}
